<?php
namespace app\zhongkl_forum\controller;
use think\facade\Db;
use think\facade\Filesystem;
class Index 
{   
    use \liliuwei\think\Jump;
    public function showSec()
    {
        // 查询帖子列表
        $sec = DB::table('zhongkl_section')
            ->field('s_name')
            ->select();
            return $sec;
    }
    //2类方法，渲染门户页面 1803010144
    public function index()
    {
        return view();
    }
    // 2类方法，渲染显示板块帖子列表页
    public function view()
    {
        // 查询s_id为1的板块帖子列表 1803010144
        $mes = DB::view('mes','s_id,m_title,u_nick,m_createat,m_id')
            ->view('user','u_img','mes.u_nick = user.u_nick')
            ->where('s_id',1)
            ->order("m_createat","desc")
            ->select();
        // echo $mes;
            // 传递参数，渲染模本页面
            // echo $mes;
            // 查询板块
        $sec = $this -> showSec();
        return view('',['mes' => $mes,'sec' => $sec]);
    }
    
    // 2类方法，渲染发帖页面 1803010144
    public function post() 
    {   
        $this->check();
        $sec = $this -> showSec();
        return view('',['sec'=>$sec]);
    }
    // 1类方法，处理用户发帖信息，执行发帖 1803010144
    public function doPost()
    {
        $this->check();
        // 准备写入帖子的信息 
        $mes = [
            'm_title' => input('mtitle'),
            'm_content' => input('mcontent'),
            'u_nick' => session('uNick'),
            'm_createat' => time(),
            's_id' => 1
        ];
        // 写入帖子 1803010144
        $mesPost = Db::connect("mysql123")
            ->table('zhongkl_mes')
            ->insert($mes);
        // 判断是否写入成功
        if($mesPost == 1)
        {
            // 成功
            $this->redirect("index/view");
        }
        else{
            // 失败
            $this->error("发帖失败!");
        }
    }
     // 2类方法，渲染显示帖子详细信息页面
     public function detail()
    {
        // 查询mes、user、section 条件mes.u_nick = user.u_nick、mes.s_id = section.s_id
        // input("mid")
        $mes = Db::view('mes','m_id,m_title,m_content,u_nick,m_createat')
            ->view('user','u_img','mes.u_nick = user.u_nick')
            ->view('section','s_name','mes.s_id = section.s_id')
            ->where("m_id",input("mid"))
            ->find();
        // 查询回复用户的u_img,u_nick,r_content,_r_createat
        $res = DB::view('res','r_content,u_nick,r_createat')
            ->view('user','u_img','res.u_nick = user.u_nick')
            ->where('m_id',input("mid"))
            ->select();
        echo $mes;
        return;
        // print_r($res);
        // return;
        $sec = $this -> showSec();
        return view("",['mes'=>$mes,'sec'=>$sec,'res' => $res]);
    }
    // 1类方法，处理用户回复帖子信息，执行回复帖子 1803010144
    public function doRes()
    {
        $this ->check();
        $res = [
            'r_content' => input('rcontent'),
            'u_nick' => session('uNick'),
            'r_createat' => time(),
            'm_id' => input('mid')
        ];
        print_r($res['r_content']);
        $resUpate = DB::connect("mysql123")
                ->name("res")
                ->insert([
                    "r_content" => $res['r_content'],
                    'u_nick' => $res['u_nick'],
                    'r_createat' => time(),
                    'm_id' => $res['m_id']
                    ]);
        // echo 1;
        // return;
        if($resUpate == 1){
            $this->success('评论成功');
        }
        else{
            exit();
        }

    } 

    //  2类方法，渲染修改用户密码界面
     public function changePa()
    {
        $sec = $this-> showSec();
        return view('',['sec' => $sec]);
    }
    //  1类方法，处理用户修改密码操作，执行修改用户密码
    public function doChangePa()
    {   
        // 当用户上传修改密码表单到这时，利用用户上传的用户名提取旧密码
        $oldPa = Db::connect('mysql')
            ->name('user')
            ->where('u_nick',input('nick'))
            ->field('u_pa')
            ->find();
        $newPa = md5(input('newPa'));
        $oldPa = $oldPa['u_pa'];
        // return;
        // 判断数据库密码和输入的密码是否一致
        if($oldPa == md5(input('pa'))){
            if($oldPa !== $newPa){
                 // 运用具有更新权限的方案进行更新
            $paUpdate = DB::connect("mysql123")
                ->name('user')
                ->where('u_nick',input('nick'))
                ->update(['u_pa' => $newPa]);
                if($paUpdate != null){
                    $this->success('密码修改成功','');
                }
                else{
                    $this->error('密码修改失败');
                }
            }else{
                $this->error('你所修改的密码不能和原密码一致');
            }
           
        }else{
            $this->error('请输入正确的旧密码');
        }
        
            
           
    } 
    //  2类方法，渲染上传头像界面 1803010144
    public function me()
    {   
        $this->check();
        $sec = $this -> showSec();
        return view('',['sec'=>$sec]);
    }
    //  1类方法，处理用户上传头像信息，执行上传头像
    public function upMe()
    {   
        $this->check();
        // 获得旧头像名
        $oldFile = $meUpdate = DB::connect("mysql")
                ->table("zhongkl_user")
                ->where('u_nick',session("uNick"))
                ->field('u_img')
                ->find();
        // 获得表单上传文件 1803010144
        $file = request()->file("image");
        // 判断文件大小和类型
        try {
            validate(['file' => ['fileSize:102400', 'fileExt:jpg,png,gif']])
                ->check(['file' => $file]);
        } catch (\think\exception\ValidateException $e) {
            $return['msg'] = $e->getMessage();
            // return json($return);
            $this->error($return['msg']);
             $this->error("上传失败！");
        }
        // echo $file;
        // 上传到本地服务器
        $saveName = Filesystem::disk('public')->putFile('upload',$file);
        // echo $saveName;
        // 存入字段的图片信息 用subster截取文件名字字段 1803010144
        $fileInfo = substr($saveName,7);
        // echo $oldFile["u_img"]."<br>";
        // 完整的图片路径信息
        $fileName = app()->getRootPath() . 'public/static/zhongkl_forum/'.$saveName;
        // echo $fileName."<br>";
        // 完整的旧图片路径
        $oldfileName = app()->getRootPath() . 'public/static/zhongkl_forum/upload/'.$oldFile["u_img"];
        // echo $oldfileName;
        // return;
        if(file_exists($fileName)){
            try{
                // 判断旧头像是否是初始头像
                // 不是，则删除
                if ($oldFile["u_img"] !== "default.jpg"){
                    unlink($oldfileName);
                    echo "成功";
             }
            }catch(\Exception $e){
                echo "这是初始图片";
            }
            
            // 上传成功 1803010144 
            $meUpdate = DB::connect("mysql123")
                ->table("zhongkl_user")
                ->where('u_nick',session("uNick"))
                ->update(["u_img" => $fileInfo]);
            if($meUpdate == 1){
                // 更新成功 
                session('uImg',null);
                session('uImg',$fileInfo);
                $this->success("更新成功！","index/index");
                
            }
            else{
                // 更新失败
                $this->error("更新失败！","index/index");
                // exit();
            }
        }
        else{
            // 上传失败
            $this->error("上传图片失败！","index/index");
            // exit();
        }

        
    } 
    //  1类方法，处理用户注销账号信息，执行注销
    public function logOut()
    {
        $this->check();
        // 清除session变量的值
        session("uNick",null);
        session("uImg",null);
        $this->success("注销成功!","index/index");
    } 
    //  1类方法，检查用户登录状态
    public function check()
    {
        // 如果没有登录，就做出限制
        if (!session('?uNick')){
            $this->error("请登录后再访问该功能！","user/login");
        }
        
    }
}
